Continuous delivery is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. It aims at building, testing and releasing software faster and more frequently. This approach helps reduce the cost, time and risk of delivering changes by allowing for more incremental updates to applications in production.
Typically, the time required in a continuous delivery process is dominated by the quality assurance phase. The higher the quality of the software product to be deployed, the more time in building and testing the software product is typically required. That is, if a higher quality software product is desired to be deployed, then one many need to run more tests in the process thereby lengthening the total time in delivering the software product. If, on the other hand, a shorter deployment time is required, then one may need to reduce the number of tests of the software product.
Due to the pressure in delivering the software product as quickly as possible to the market, there is a tendency to have a shorter cycle time at the expense of the number of tests of the software product. As a result, it is not always feasible to carry out the full set of tests on the software product. However, there is not currently a means for determining the smallest number of tests to run on the software product that is needed to achieve the required quality in the fast continuous delivery process.